package com.life.ai.server.common.utils;

import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
import com.aliyun.oss.ServiceException;
import org.springframework.util.StringUtils;

import java.util.Collection;
import java.util.Map;

/**
 * 断言工具类
 * AssertUtils
 *
 * @author kylewka
 * @since 2023/11/14
 */
public class AssertUtils extends Assert {

    /**
     * 条件必须成立
     *
     * @param condition 条件
     * @param message   错误信息
     */
    public static void isTrue(boolean condition, String message, Object... args) {
        if (!condition) {
            throw new ServiceException(StrUtil.format(message, args));
        }
    }

    /**
     * 对象必须是 null
     *
     * @param obj     对象
     * @param message 错误信息
     */
    public static void isNull(Object obj, String message, Object... args) {
        if (obj != null) {
            throw new ServiceException(StrUtil.format(message, args));
        }
    }

    /**
     * 对象不能为null
     *
     * @param obj     对象
     * @param message 错误信息
     */
    public static void notNull(Object obj, String message) {
        if (obj == null) {
            throw new ServiceException(message);
        }
    }


    /**
     * 字符串必须是空
     *
     * @param str     对象
     * @param message 错误信息
     */
    public static void isBlank(String str, String message) {
        if (StringUtils.hasText(str)) {
            throw new ServiceException(message);
        }
    }


    /**
     * 字符串不能为空
     *
     * @param str     对象
     * @param message 错误信息
     */
    public static void notBlank(String str, String message) {
        if (!StringUtils.hasText(str)) {
            throw new ServiceException(message);
        }
    }

    /**
     * 字符串不能为空
     *
     * @param str     str
     * @param message 错误信息
     */
    public static void notEmpty(String str, String message) {
        if (!StringUtils.hasText(str)) {
            throw new ServiceException(message);
        }
    }

    /**
     * 字符串必须为空
     *
     * @param str     str
     * @param message 错误信息
     */
    public static void isEmpty(String str, String message) {
        if (StringUtils.hasText(str)) {
            throw new ServiceException(message);
        }
    }

    /**
     * 不能为空
     *
     * @param collect 集合
     * @param message 错误信息
     */
    public static void notEmpty(Collection<?> collect, String message) {
        if (CollectionUtil.isEmpty(collect)) {
            throw new ServiceException(message);
        }
    }

    /**
     * 必须为空
     *
     * @param collect 集合
     * @param message 错误信息
     */
    public static void isEmpty(Collection<?> collect, String message) {
        if (CollectionUtil.isNotEmpty(collect)) {
            throw new ServiceException(message);
        }
    }

    /**
     * 不能为空
     *
     * @param map     map
     * @param message 错误信息
     */
    public static void notEmpty(Map<?, ?> map, String message) {
        if (CollectionUtil.isEmpty(map)) {
            throw new ServiceException(message);
        }
    }

    /**
     * 必须为空
     *
     * @param map     map
     * @param message 错误信息
     */
    public static void isEmpty(Map<?, ?> map, String message) {
        if (CollectionUtil.isNotEmpty(map)) {
            throw new ServiceException(message);
        }
    }

    /**
     * 不能为空
     *
     * @param iterable iterable
     * @param message  错误信息
     */
    public static void notEmpty(Iterable<?> iterable, String message) {
        if (CollectionUtil.isEmpty(iterable)) {
            throw new ServiceException(message);
        }
    }

    /**
     * 必须为空
     *
     * @param iterable iterable
     * @param message  错误信息
     */
    public static void isEmpty(Iterable<?> iterable, String message) {
        if (CollectionUtil.isNotEmpty(iterable)) {
            throw new ServiceException(message);
        }
    }
}
